summaryrefslogtreecommitdiffstats
path: root/hw/src/main.cpp
blob: 5b0d7f9cb7a88302ca49374441dfaab0453dcb8c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <Arduino.h>
#include <EEPROM.h>
#include <WiFiUdp.h>
#include <ESP8266WiFi.h>
unsigned int packets = 0;
WiFiUDP u;
unsigned int doreport = 0;
uint64_t imp;
unsigned long last_imp = 0;
IRAM_ATTR void isr () {
	unsigned long time = millis();
	unsigned long lumax = -1;
	if (time < last_imp) { // debouncer
		if (lumax - last_imp + time < (unsigned long) 100) // saj ne bo več kot 36 kW porabe
			return;
	} else
		if (last_imp + (unsigned long) 100 > time)
			return;
	last_imp = time;
	if (imp++ % 2)
		digitalWrite(D8, HIGH);
	else
		digitalWrite(D8, LOW);
}
void setup () {
	Serial.begin(MONITOR_SPEED);
	pinMode(D5, INPUT);
	pinMode(D6, OUTPUT);
	pinMode(D7, OUTPUT);
	pinMode(D8, OUTPUT);
	EEPROM.begin(512);
	EEPROM.get(0, imp);
	WiFi.begin("OpenWrt", NULL);
	IPAddress a(10,69,69,35);
	IPAddress g(10,69,69,1);
	IPAddress n(255,255,255,0);
	IPAddress d1(10,69,69,1);
	IPAddress d2(89,212,194,154);
	WiFi.config(a, g, n, d1, d2);
	u.begin(35358);
	attachInterrupt(digitalPinToInterrupt(D5), isr, FALLING);
}
void loop () {
	if (WiFi.status() == WL_CONNECTED)
		digitalWrite(D7, LOW);
	else
		digitalWrite(D7, HIGH);
	if (u.parsePacket()) {
		packets++;
		if (packets % 2)
			digitalWrite(D6, HIGH);
		else
			digitalWrite(D6, LOW);
		Serial.println();
		char p[512];
		u.read(p, 255);
		if (!strncmp(p, "reset", 5)) {
			imp = 0;
			Serial.println("reset");
		}
	}
	uint64_t imp_stored;
	EEPROM.get(0, imp_stored);
	if (imp_stored != imp) {
		EEPROM.put(0, imp);
		EEPROM.commit();
		Serial.println(String(imp));
		IPAddress b(255,255,255,255);
		u.beginPacket(b, 35358);
		char buf[255];
		sprintf(buf, "%lld\n", imp);
		u.write(buf);
		u.endPacket();
	}
}